/*
 * @lc app=leetcode.cn id=136 lang=typescript
 *
 * [136] 只出现一次的数字
 */

// @lc code=start

//  思路：异或
//  相同的两个数异或就为0，而与0异或就是自己，所以将数组的每一个进行异或，留下的就是只出现一次的数字

//  O(n) O(1)

function singleNumber(nums: number[]): number {
    let res = nums[0]
    for (let i = 1; i < nums.length; i++) {
        res ^= nums[i]
    }
    return res
};
// @lc code=end

console.log(singleNumber([2, 2, 1]));        // 1
console.log(singleNumber([4, 1, 2, 1, 2]));  // 4
